עזרה עם מחלקה
עכשיו זה הקוד:
class db extends mysqli
{
private $connected = false;
public function __construct($host, $user, $pass, $db, $charset)
{
parent::__construct($host, $user, $pass, $db);
if ($this->connect_error) die("Connection Error: ".$this->connect_error );
$this->set_charset($charset);
$this->connected = true;
}
public function query($query, $resultmode = MYSQLI_STORE_RESULT )
{
$res = parent::query($query, $resultmode);
if($res === false) die("SQL Error: ".$this->error );
return $res;
}
function __destruct() { if($this->connected) $this->close(); }
}
//הגדררות
class setting{
public function setting($text){
$sql = $mysqli->query("SELECT * FROM `setting` WHERE name='".$text."'");
$sql = $sql->fetch_array();
echo $sql['num'];
}
}
ואני לא מבין למה הפונקציה setting לא עובדת
אם אפשר עזרה,
תודה
10 תשובות
נ.ב לקובץ הזה יש include לדף אחד שבו מתחילים את החיבור למסד ויוצרים את המחלקות.
אין לך שום קשר מבני בין setting לבין db..
setting היא לא שכפול לא הרחבה ולא כלום בשביל db
איך אתה רוצה שsetting תדע מה זה query או fetch_array מבלי שהיא תדע מה זה בכלל..
זה שהמחלקות מסודרות באותו קוד לא גורם להם להכיר אחת את השנייה
הפתרון שלך :
1.להכניס את המתודה לתוך db כי אני לא רואה סיבה שהיא תשב בתוך מחלקה בפני עצמה
2.להרחיב את db לsetting ואז להשתמש בתכונות האב שלה
לא הבנתי עוד מה אתה מנסה לבצע ולמה זה יושב כמחלקה
תסביר לעומק ואשמח לעזור
אני לומד את הנושא.
עשיתי את זה וזה עדיין לא עובד...
ככה זה מתבצע
http://phpguide.co.il/phplive?code=476
לא עובד כי..
query הוא מתודה ממחלקת הMYSQLI ואם תרצה להשתמש בו :
או שתרחיב את MYSQLI לSETTINGS ואז תשמש בו עם PARENT כמו שרשמתי
או שתיצור מתודה בתוך DB שמקבלת את השאילתא ורק מריצה ,זאת אומרת הרחבה של DB לSETTINGS
תשחק עם מה ששלחתי תבין יותר
הלכתי על ההרחבה של הMYSQLI.
ביצעתי ככה:
וזה עובד קודם כל תודה!
אבל איך לעשות את זה עם ה fetch_array?
אין סיבה ש-setting תירש מ-mysqli. היא לא מחלקת-בת, היא לא משתייכת ל-mysqli והיא לא מרחיבה את mysqli.
או שתשתמש ב-singleton או שתעביר את mysqli$ כפרמטר ותשתמש בו.